package cn.jane.rpc.api;

import java.io.IOException;
import java.net.URI;
import java.util.List;
import java.util.Set;

/**
 * 注册服务相关的接口
 */
public interface NameService {

    /**
     * 连接到注册中心
     *
     * @param nameServiceUri 注册中心的 URI
     */
    void connect(URI nameServiceUri);

    /**
     * 注册服务
     *
     * @param serviceName 待注册服务的名称
     * @param serviceUri  待注册服务的 URI
     * @throws IOException 注册时可能会存在的 IO 异常
     */
    void registerService(String serviceName, URI serviceUri) throws IOException;

    /**
     * 查询服务地址
     *
     * @param serviceName 待查询服务的名称
     * @return 查询到的服务 URI 的集合
     * @throws IOException 查询时可能会存在的 IO 异常
     */
    List<URI> lookupService(String serviceName) throws IOException;

    /**
     * 获取所有支持的协议
     *
     * @return 所有支持协议的集合
     */
    Set<String> supportedSchemes();
}
